home *** CD-ROM | disk | FTP | other *** search
/ Freelog Special Edition 10 / FreelogHS10.iso / Buzz / Buzz_Advanced_Pack.exe / {app} / Dev / Overloader - Track Organizer / track.cpp < prev    next >
C/C++ Source or Header  |  2001-11-06  |  5KB  |  197 lines

  1. #include "../mdk/mdk.h"
  2. #include <windows.h>
  3. #include "resource.h"
  4.  
  5. #pragma optimize ("awy", on) 
  6.  
  7. int (__cdecl *oeblib_GetRecordingMode)(void);
  8.  
  9. CMachineParameter const *pParameters[] = { NULL };
  10. CMachineAttribute const *pAttributes[] = { NULL };
  11.  
  12. #pragma pack(1)        
  13.  
  14. #pragma pack()
  15.  
  16. CMachineInfo const MacInfo = 
  17. {
  18.     MT_EFFECT,
  19.     MI_VERSION,    
  20.     MIF_DOES_INPUT_MIXING,
  21.     0,                                        // min tracks
  22.     0,                                        // max tracks
  23.     0,                                        // numGlobalParameters
  24.     0,                                        // numTrackParameters
  25.     pParameters,
  26.     0,
  27.     pAttributes,
  28.     "Track Organizer",                                // name
  29.     "Track",                                // short name
  30.     "CyanPhase",                        // author
  31.     "&About..."
  32. };
  33.  
  34. char myappdir[255];
  35. int library_loaded;
  36. HINSTANCE dllInstance;
  37. int (__cdecl *oeblib_GetTrackHandler)(char *machinename);
  38. int (__cdecl *oeblib_SetTrackName)(int handler, char *trackname);
  39. bool (__cdecl *oeblib_SendSamples)(int handler, int numsamples, int nchannels, float *psamples);
  40. int (__cdecl *oeblib_ReleaseTrackHandler)(int handler);
  41.  
  42. class miex : public CMDKMachineInterfaceEx { };
  43.  
  44. class mi : public CMDKMachineInterface
  45. {
  46. public:
  47.     mi();
  48.     virtual ~mi();
  49.     virtual void Tick();
  50.     virtual void MDKInit(CMachineDataInput * const pi);
  51.     virtual bool MDKWork(float *psamples, int numsamples, int const mode);
  52.     virtual bool MDKWorkStereo(float *psamples, int numsamples, int const mode);
  53.     virtual void Command(int const i);
  54.     virtual void MDKSave(CMachineDataOutput * const po);
  55.     virtual char const *DescribeValue(int const param, int const value);
  56.  
  57. public:
  58.     virtual CMDKMachineInterfaceEx *GetEx() { return &ex; }
  59.     virtual void OutputModeChanged(bool stereo) {}
  60.  
  61. public:
  62.     miex ex;
  63.  
  64. public:
  65.     int track_id;
  66.     CMachine *ThisMachine;
  67. };
  68.  
  69.  
  70. mi::mi() { }
  71.  
  72. mi::~mi() {
  73.     if (library_loaded == 1) {
  74.         oeblib_ReleaseTrackHandler(track_id);
  75.     }
  76. }
  77.  
  78. void mi::MDKInit(CMachineDataInput * const pi)
  79. {
  80.     SetOutputMode( true );
  81.     ThisMachine = pCB->GetThisMachine();
  82.     if (library_loaded == 1) {
  83.         track_id = oeblib_GetTrackHandler("CyanPhase Track Organizer 1.0");
  84.     } else {
  85.         track_id = -1;
  86.     }
  87. }
  88.  
  89. void mi::MDKSave(CMachineDataOutput * const po) { }
  90.  
  91. void mi::Tick() { }
  92.  
  93. bool mi::MDKWork(float *psamples, int numsamples, int const mode)
  94. {
  95.     return false;
  96. }
  97.  
  98. bool mi::MDKWorkStereo(float *psamples, int numsamples, int const mode)
  99. {
  100.     int i;
  101.     char bufname[120];
  102.     float nnsmp[1024];
  103.     if (library_loaded == 1) {
  104.         switch (mode) {
  105.         case WM_WRITE:
  106.             for( i=0; i<numsamples*2; i++ ) {
  107.                 nnsmp[i] = 0.0f;
  108.             };
  109.             sprintf(bufname, pCB->GetMachineName(ThisMachine));
  110.             oeblib_SetTrackName(track_id, bufname);
  111.             oeblib_SendSamples(track_id, numsamples, 2, nnsmp);
  112.             return false;
  113.         case WM_NOIO:
  114.             for( i=0; i<numsamples*2; i++ ) {
  115.                 nnsmp[i] = 0.0f;
  116.             };
  117.             sprintf(bufname, pCB->GetMachineName(ThisMachine));
  118.             oeblib_SetTrackName(track_id, bufname);
  119.             oeblib_SendSamples(track_id, numsamples, 2, nnsmp);
  120.             return false;
  121.         case WM_READ:
  122.             sprintf(bufname, pCB->GetMachineName(ThisMachine));
  123.             oeblib_SetTrackName(track_id, bufname);
  124.             return oeblib_SendSamples(track_id, numsamples, 2, psamples);
  125.         default:
  126.             sprintf(bufname, pCB->GetMachineName(ThisMachine));
  127.             oeblib_SetTrackName(track_id, bufname);
  128.             return oeblib_SendSamples(track_id, numsamples, 2, psamples);
  129.         }
  130.     } else {
  131.         switch (mode) {
  132.         case WM_WRITE: return false;
  133.         case WM_NOIO: return false;
  134.         case WM_READ: return true;
  135.         default: return true;
  136.         }
  137.     }
  138.     return true;
  139. }
  140.  
  141.  
  142.  
  143. BOOL WINAPI DllMain ( HANDLE hModule, DWORD fwdreason, LPVOID lpReserved ) {
  144.     switch (fwdreason) {
  145.     case DLL_PROCESS_ATTACH: {
  146.         char baba[256], baba2[256];
  147.         char *filen;
  148.         dllInstance = (HINSTANCE) hModule;
  149.         GetModuleFileName(dllInstance,baba,256);
  150.         GetFullPathName(baba,256,baba2,&filen);
  151.         sprintf(filen,"\0");
  152.         sprintf(&baba2[(int)(strlen(baba2) - 2 - 12)],"\0");
  153.         sprintf(myappdir,baba2);
  154.         char thestrdata[200];
  155.         sprintf(thestrdata, "%s\\overloader extbuzz.dll", myappdir);
  156.         HMODULE h_dll=LoadLibrary(thestrdata);
  157.         if(h_dll==NULL) {
  158.             library_loaded = 0;
  159.         } else {
  160.             library_loaded = 1;
  161.             oeblib_GetTrackHandler=(int (__cdecl *)(char *machinename))GetProcAddress(h_dll,"OEBGetTrackHandler");
  162.             oeblib_SetTrackName=(int (__cdecl *)(int handler, char *trackname))GetProcAddress(h_dll,"OEBSetTrackName");
  163.             oeblib_SendSamples=(bool (__cdecl *)(int handler, int numsamples, int nchannels, float *psamples))GetProcAddress(h_dll,"OEBSendSamples");
  164.             oeblib_ReleaseTrackHandler=(int (__cdecl *)(int handler))GetProcAddress(h_dll,"OEBReleaseTrackHandler");
  165.         }
  166.         break;
  167.     }
  168.     case DLL_THREAD_ATTACH: break;
  169.     case DLL_THREAD_DETACH: break;
  170.     case DLL_PROCESS_DETACH: break;
  171.     }
  172.     return TRUE;
  173. }
  174.  
  175.  
  176. void mi::Command(int const i)
  177. {
  178.     switch (i)
  179.     {
  180.     case 0:
  181.         MessageBox(NULL,"Track Organizer 1.0\n\nWritten by CyanPhase\n\nWorks with the Overloader system.\n\nCopyright 2001 Edward L. Blake\nEmail: blakee@rovoscape.com","About Track Organizer",MB_OK|MB_SYSTEMMODAL);
  182.         break;
  183.     default:
  184.         break;
  185.     }
  186. }
  187.  
  188. char const *mi::DescribeValue(int const param, int const value)
  189. {
  190.     return NULL;
  191. }
  192.  
  193. #pragma optimize ("", on) 
  194.  
  195. DLL_EXPORTS
  196.  
  197.